import {defineStore} from "pinia"
import {getToken} from "@/util/token/tokenUtil"; // 定义容器

export const useCommonStore = defineStore('common', {
    /**
     * 存储全局状态
     * 1.必须是箭头函数: 为了在服务器端渲染的时候避免交叉请求导致数据状态污染
     * 和 TS 类型推导
     */
    state: () => {
        return {
            isLoading: true,
            currentPosition: "首页",
            message: '',
            ws: null
        }
    },
    /**
     * 用来封装计算属性 有缓存功能  类似于computed
     */
    getters: {},
    /**
     * 编辑业务逻辑  类似于methods
     */
    actions: {
        changeLoading(value) {
            this.isLoading = value
        },
        connectWebSocket() {
            // 确保有一个有效的token和WebSocket URL
            const token = getToken('token');
            if (!token) {
                console.error('登录了才连接websocket');
                return;
            }
            const url = process.env.VUE_APP_BASE_API + "/ws/" + token;
            this.ws = new WebSocket(url);
            // 你可以在这里添加更多的事件监听器
            this.ws.onmessage = (event) => {
                // 处理接收到的消息
                this.message = JSON.parse(event.data)
            };
            this.ws.onerror = (error) => {
                console.error('WebSocket Error:', error);
            };
            this.ws.onclose = () => {
                console.log('WebSocket Connection Closed');
                // 如果需要，可以在这里重置ws为null或执行其他清理操作
                this.ws = null;
            };
        },
        sendMessage(message) {
            if (this.ws) {
                this.ws.send(message)
            }
        },
    },
    // 持久化设置
    persist: {
        enabled: true,	//开启
        storage: sessionStorage,	//修改存储位置
        key: '',	//设置存储的key,在这里是存在sessionStorage时的键
        paths: [],//指定要长久化的字段
    },
})
